Freigeben über


System.Collections.Generic.HashSet<T-Klasse>

Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.

Die HashSet<T> Klasse bietet Hochleistungs-Set-Vorgänge. Ein Satz ist eine Auflistung, die keine doppelten Elemente enthält und deren Elemente in keiner bestimmten Reihenfolge angeordnet sind.

Die Kapazität eines HashSet<T> Objekts ist die Anzahl der Elemente, die das Objekt enthalten kann. Die Kapazität eines HashSet<T> Objekts erhöht sich automatisch, wenn dem Objekt Elemente hinzugefügt werden.

Die HashSet<T> Klasse basiert auf dem Modell der mathematischen Sätze und bietet leistungsstarke Satzvorgänge, die dem Zugriff auf die Schlüssel der Dictionary<TKey,TValue> Auflistungen ähneln Hashtable . In einfachen Worten kann die HashSet<T> Klasse als Dictionary<TKey,TValue> Sammlung ohne Werte betrachtet werden.

Eine HashSet<T> Auflistung ist nicht sortiert und darf keine doppelten Elemente enthalten. Wenn die Reihenfolge oder Elementduplizierung wichtiger als die Leistung ihrer Anwendung ist, sollten Sie die List<T> Klasse zusammen mit der Sort Methode verwenden.

HashSet<T> stellt viele mathematische Satzvorgänge bereit, z. B. Set Addition (Vereinigungen) und Subtraktion festlegen. In der folgenden Tabelle sind die bereitgestellten HashSet<T> Vorgänge und ihre mathematischen Entsprechungen aufgeführt.

HashSet-Vorgang Mathematische Entsprechung
UnionWith Union oder Addition festlegen
IntersectWith Schnittmenge
ExceptWith Subtraktion festlegen
SymmetricExceptWith Symmetrischer Unterschied

Zusätzlich zu den aufgelisteten Satzvorgängen stellt die HashSet<T> Klasse auch Methoden zum Bestimmen der Setgleichheit, Überlappung von Sätzen und ob ein Satz eine Teilmenge oder Eine Obermenge eines anderen Satzes ist.

.NET Framework nur: Bei sehr großen HashSet<T> Objekten können Sie die maximale Kapazität auf 2 Milliarden Elemente auf einem 64-Bit-System erhöhen, indem Sie das enabled Attribut des <gcAllowVeryLargeObjects> Konfigurationselements true in der Laufzeitumgebung festlegen.

Die HashSet<T>-Klasse implementiert die ISet<T>-Schnittstelle.

HashSet- und LINQ-Set-Vorgänge

LINQ bietet Zugriff auf die DistinctVorgänge , Union, Intersectund Except legt Vorgänge für jede Datenquelle fest, die die IEnumerable Oder IQueryable Schnittstellen implementiert. HashSet<T> bietet eine größere und stabilere Sammlung von Satzvorgängen. Stellt z. B HashSet<T> . Vergleiche wie IsSubsetOf z. B. und IsSupersetOf.

Der Hauptunterschied zwischen LINQ-Satzvorgängen und HashSet<T> -vorgängen besteht darin, dass LINQ-Setvorgänge immer eine neue IEnumerable<T> Auflistung zurückgeben, während die HashSet<T> entsprechenden Methoden die aktuelle Auflistung ändern.

Wenn Sie in der Regel einen neuen Satz erstellen müssen oder ihre Anwendung nur Zugriff auf die bereitgestellten Satzvorgänge benötigt, reicht die Verwendung von LINQ-Set-Vorgängen für eine sammlung IEnumerable<T> oder ein Array aus. Wenn Ihre Anwendung jedoch Zugriff auf zusätzliche Satzvorgänge erfordert oder wenn es nicht wünschenswert oder erforderlich ist, eine neue Auflistung zu erstellen, verwenden Sie die HashSet<T> Klasse.

In der folgenden Tabelle sind die HashSet<T> Vorgänge und die entsprechenden LINQ-Satzvorgänge aufgeführt.

HashSet-Vorgang LINQ-Entsprechung
UnionWith Union
IntersectWith Intersect
ExceptWith Except
Nicht angegeben. Distinct
SymmetricExceptWith Nicht angegeben.
Overlaps Nicht angegeben.
IsSubsetOf Nicht angegeben.
IsProperSubsetOf Nicht angegeben.
IsSupersetOf Nicht angegeben.
IsProperSupersetOf Nicht angegeben.
SetEquals Nicht angegeben.